package com.example.chapter3.config;

import com.example.chapter3.pojo.User;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import javax.xml.ws.Service;
import java.util.Properties;

//＠Configuration 代表这是一个 Java 配置文件, Spring 的容器会根据
//它来生成 IoC 容器去装配 Bean;
//＠ComponentScan，意味着它会进行扫描，但是它只会扫描类 AppConfig 所在的当前
//包和其子包 ，
// ComponentScan 中还有一个配置项 lazyInit，只可以配置 Boolean 值，且默认值为 false ，也就是
//默认不进行延迟初始化，因此在默认的情况下 Spring 会对 Bean 进行实例化和依赖注入对应的属性值。
@Configuration
//@ComponentScan("com.example.chapter3.*")
@ComponentScan(basePackages = "com.example.chapter3.*", lazyInit = true)
//@ComponentScan(basePackageClasses = {User.class})
//@ComponentScan(basePackages = "com.example.chapter3.*", excludeFilters = {@ComponentScan.Filter(classes = {Service.class})})
public class AppConfig {
//@Bean 代表将 initUser 方法返回的 POJO 装配到 IoC 容器中，而其
//属性 name 定义这个 Bean 的名称，如果没有配置它，则将方法名称“ initUser”作为 Bean 的名称保
//存到 Spring IoC 容器中
//    @Bean(name = "user")
//    public User initUser(){
//        User user = new User();
//        user.setId(1L);
//        user.setUserName("user_name_1");
//        user.setNote("note_1");
//        return user;
//
//    }

    @Bean(name = "dataSource")
    public DataSource getDataSource(){
        Properties props = new Properties();
        props.setProperty("driver", "com.mysql.jdbc.Driver");
        props.setProperty("url", "jdbc:mysql://localhost:3306/timo");
        props.setProperty("username", "root");
        props.setProperty("password", "password1");

        DataSource dataSource = null;
        try {
            dataSource = BasicDataSourceFactory.createDataSource(props);
        }catch (Exception e){
            e.printStackTrace();
        }
        return dataSource;
    }
}
